#!/bin/bash

# Java进程监控脚本安装工具
# 作者：系统管理员
# 用途：自动安装和配置Java进程内存监控系统

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 监控脚本文件
MONITOR_SCRIPT="${SCRIPT_DIR}/process_monitor.sh"
CONFIG_FILE="${SCRIPT_DIR}/monitor_config.conf"

echo "=========================================="
echo "Java进程内存监控系统安装工具"
echo "=========================================="

# 检查必要文件是否存在
echo "1. 检查必要文件..."

if [[ ! -f "$MONITOR_SCRIPT" ]]; then
    echo "错误：监控脚本不存在: $MONITOR_SCRIPT"
    exit 1
fi

if [[ ! -f "$CONFIG_FILE" ]]; then
    echo "错误：配置文件不存在: $CONFIG_FILE"
    exit 1
fi

echo "   ✓ 监控脚本: $MONITOR_SCRIPT"
echo "   ✓ 配置文件: $CONFIG_FILE"

# 设置执行权限
echo ""
echo "2. 设置脚本执行权限..."
chmod +x "$MONITOR_SCRIPT"
chmod +x "$0"

if [[ $? -eq 0 ]]; then
    echo "   ✓ 脚本执行权限设置成功"
else
    echo "   ✗ 脚本执行权限设置失败"
    exit 1
fi

# 创建日志目录
echo ""
echo "3. 创建日志目录..."
LOG_DIR="${SCRIPT_DIR}/logs"
mkdir -p "$LOG_DIR"

if [[ $? -eq 0 ]]; then
    echo "   ✓ 日志目录创建成功: $LOG_DIR"
else
    echo "   ✗ 日志目录创建失败"
    exit 1
fi

# 测试监控脚本
echo ""
echo "4. 测试监控脚本..."
bash "$MONITOR_SCRIPT" -t

if [[ $? -eq 0 ]]; then
    echo "   ✓ 监控脚本测试成功"
else
    echo "   ✗ 监控脚本测试失败"
    exit 1
fi

# 询问是否配置crontab
echo ""
echo "5. 配置定时任务..."
read -p "是否要自动配置crontab定时任务？(y/n): " -r
echo

if [[ $REPLY =~ ^[Yy]$ ]]; then
    # 询问监控间隔
    echo "选择监控间隔："
    echo "1) 每分钟检查一次 (推荐)"
    echo "2) 每2分钟检查一次"
    echo "3) 每5分钟检查一次"
    echo "4) 自定义间隔"
    read -p "请选择 (1-4): " -r choice
    
    case $choice in
        1)
            cron_expr="*/1 * * * *"
            ;;
        2)
            cron_expr="*/2 * * * *"
            ;;
        3)
            cron_expr="*/5 * * * *"
            ;;
        4)
            read -p "请输入cron表达式 (例如: */3 * * * *): " -r cron_expr
            ;;
        *)
            echo "无效选择，使用默认值：每分钟检查一次"
            cron_expr="*/1 * * * *"
            ;;
    esac
    
    # 构建crontab条目
    cron_job="$cron_expr $MONITOR_SCRIPT > /dev/null 2>&1"
    
    echo "准备添加以下crontab任务："
    echo "$cron_job"
    echo ""
    read -p "确认添加？(y/n): " -r
    
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        # 使用安全的方式添加crontab，保留现有任务
        (crontab -l 2>/dev/null; echo "$cron_job") | crontab -
        
        if [[ $? -eq 0 ]]; then
            echo "   ✓ Crontab任务添加成功"
            echo ""
            echo "当前crontab任务列表："
            crontab -l | grep -v "^#" | grep -v "^$"
        else
            echo "   ✗ Crontab任务添加失败"
        fi
    else
        echo "   - 跳过crontab配置"
    fi
else
    echo "   - 跳过crontab配置"
fi

# 显示手动配置说明
echo ""
echo "=========================================="
echo "安装完成！"
echo "=========================================="
echo ""
echo "📁 脚本位置: $MONITOR_SCRIPT"
echo "📁 配置文件: $CONFIG_FILE"
echo "📁 日志目录: $LOG_DIR"
echo ""
echo "🔧 手动运行监控:"
echo "   $MONITOR_SCRIPT"
echo ""
echo "🔧 查看帮助:"
echo "   $MONITOR_SCRIPT -h"
echo ""
echo "🔧 手动配置crontab (如果之前跳过):"
echo "   crontab -e"
echo "   添加行: */1 * * * * $MONITOR_SCRIPT > /dev/null 2>&1"
echo ""
echo "📊 查看监控日志:"
echo "   tail -f $LOG_DIR/process_monitor.log"
echo ""
echo "📊 查看重启历史:"
echo "   cat $LOG_DIR/restart_history.log"
echo ""
echo "⚠️  重要提醒:"
echo "   1. 请检查配置文件中的路径是否正确"
echo "   2. 确保启动脚本有执行权限"
echo "   3. 建议先在测试环境验证"
echo "   4. 定期检查日志文件，避免磁盘空间不足"
echo ""
echo "==========================================" 
